One form in which computer software is often supplied to users is with the code embodied in read only memory (ROM). The use of ROM based software has become particularly common in the areas of video games and personal computers. ROM based software for these systems includes both system software, for which the ROM is typically a permanent portion of the circuit, and application software, for which the ROM is typically provided as a part of a plug-in module.
A difficulty with the use of ROM based software lies in the ease with which the contents of a typical ROM may be read. Once the contents of the ROM have been obtained the software may be easily copied.
Various schemes to prevent such copying have been proposed. One alternative is to encrypt memory address signals and data signals transmitted between the ROM and the central processor. One disadvantage of this approach is that a person with a knowledge of the encryption circuitry could defeat the encryption scheme and copy the software. Also, unless the encryption and decryption is performed within the microprocessor itself, the decrypted code may be obtained at the processor inputs. A third disadvantage is that because the central processor must encrypt and decrypt data, units manufactured prior to the inclusion of the encryption scheme would require retrofitting to be compatible with such ROMs.
A second approach is to monitor program flow and generate address signals within the ROM itself. In this way attempts to read information in the ROM without executing the program itself are detected and only valid program execution paths are allowed. A system providing such monitoring is described in U.S. Pat. No. 4,377,844 issued to Marc Kaufman on Mar. 22, 1983. This system requires a complicated arrangement of counters and address generation circuitry. The complexity of the circuit involved makes it impractical for use in an inexpensive ROM based software package. Furthermore the system described in this patent allows execution of code only in predefined blocks. Many software packages include provision for interrupts which will cause program execution to be suspended temporarily while specific functions are performed. Because these interrupts could occur while a predefined block is being executed the compatability of such a ROM with an interrupt system is unclear.